package kr.hkit.powerjava.chapter23;

class Counter{
	private int value;
	public synchronized void increment(){value++;}
	public synchronized void decrement(){value--;}
	public synchronized void prnCounter(){System.out.println(value);}
}
	
class SharedThread extends Thread{
	Counter sharedCounter;

	public SharedThread(Counter sharedCounter) {
		this.sharedCounter = sharedCounter;
		start();
	}
	
	@Override
	public void run() {
		int i =0;
		while(i<20000){
			sharedCounter.increment();//counter의 value값을 1증가
			sharedCounter.decrement();//counter의 value값을 1감소
			if (i % 40 == 0){
				sharedCounter.prnCounter();
				try{
					sleep((int)(Math.random()*2));
				}catch(InterruptedException e){}
			}
			i++;
		}
	}
}

public class CounterTest {
	public static void main(String[] args) {
		Counter c = new Counter();
		
		new SharedThread(c);
		new SharedThread(c);
		new SharedThread(c);
		new SharedThread(c);
	}
}
